팩토리 패턴
12 Oct 2018
팩토리 패턴 요약 설명
- 타입 :
생성
- 설명 : 여러 가지 객체를 생성을 할 수 있도록 생성 기능을 동일한 인터페이스로 제공하는 패턴
UML
예제
콘솔창에 상하로 구분선를 넣고 그 사이에 원하는 문자열을 출력하는 프로그램을 만든다고 가정해 봅시다. 그렇다면 우리에게 필요한 것을 ‘출력을 원하는 문자열’ 윗쪽에 ‘출력할 구분선’ 출력하고 ‘출력을 원하는 문자열’ 아랫쪽에도 ‘출력할 구분선’ 출력합니다.
- 위쪽 구분선
- 출력하고 싶은 문자열
- 아래쪽 구분선
윗쪽 구분선을 출력하는 함수를 printUpSeparator()
라고 하고 아래쪽 구분선을 출력하는 함수를 printBottomSeparator()
라 하고 원하는 문자열을 출력하는 함수를 printContent()
라고 했을 때 호출되는 순서는
printUpSeparator()
->printContent()
-> printBottomSeparator()
일 것입니다. 이 순서는 꼭 지켜져야 합니다. 이 순서를 지켜주는 함수를 printContentWithBox()
라고 하면 이 함수는 다음과 같은 모양일 것입니다.
//java
public void printContentWithBox(String str){
printUpSeparator(str);
printContent(str);
printBottomSeparator(str);
}
추가적으로 구분선의 모양은 바꿀 수 있게 하고 싶습니다. 그래서 함수 printUpSeparator()
, printBottomSeparator()
,printContent()
는 구현이 필요한 가상 메소드로 선언만 됩니다.printContentWithBox()
함수는 이 세 함수를 호출하는 함수이기 때문에 구현이 완성된 함수입니다. 이 두가지 종류의 요구사항을 모두 담을 수 있는 형태의 객체는 추상 클래스입니다.
//java
abstract class BoxPrinter {
void printUpSeparator(String str);
void printContent(String str);
void printBottomSeparator(String str);
public void printContentWithBox(String str){
printUpSeparator(str);
printContent(str);
printBottomSeparator(str);
}
}
다음에 나오는 각 언어로 구현한 템플릿 메소드 패턴입니다.
Java 예제
abstract class BoxPrinter {
protected void printUpSeparator(String str);
protected void printContent(String str);
protected void printBottomSeparator(String str);
public void printContentWithBox(String str){
printUpSeparator(str);
printContent(str);
printBottomSeparator(str);
}
}
class SimpleBoxPrinter extends BoxPrinter{
protected void printUpSeparator(String str){
System.out.println("--------------");
}
protected void printContent(String str){
System.out.println($str);
}
protected void printBottomSeparator(String str){
System.out.println("--------------");
}
}
PHP 예제
#준비중
C++ 예제
//준비중
Python 예제
#준비중
C# 예제
//준비중